package com.xxjh.brs.map.utils;

import com.xxjh.brs.map.dto.TileRange;
import com.xxjh.brs.map.enums.MapServiceType;

/**
 * @author CHENCHEN
 * @title 地图计算方法
 * @company 新兴际华科技（天津）有限公司
 * @create 2024-07-03 19:21
 */
public class MapDownLoadConstants {

    public static long IMG_SIZE = 14 * 1024L;

    /**
     * 计算特定层级下的瓦片范围。
     *
     * @param extent      地图范围。
     * @param zoomLevel   当前层级。
     * @return 包含最小行、最大行、最小列、最大列的数组。
     */
    public static TileRange calculateTileRange(double[] extent, int zoomLevel) {
        return new TileRange(
                TileCoordinateConverter.getOSMTileYFromLatitude(extent[3], zoomLevel),
                TileCoordinateConverter.getOSMTileYFromLatitude(extent[1], zoomLevel),
                TileCoordinateConverter.getOSMTileXFromLongitude(extent[0], zoomLevel),
                TileCoordinateConverter.getOSMTileXFromLongitude(extent[2], zoomLevel)
        );
    }

    /**
     * 计算总共有多少片瓦片需要下载。
     *
     * @param extent      地图范围。
     * @param minHeight   开始层级。
     * @param maxHeight   结束层级。
     * @return 总瓦片数。
     */
    public static int calculateTotalTiles(double[] extent, int minHeight, int maxHeight) {
        int total = 0;
        for (int z = minHeight; z <= maxHeight; z++) {
            TileRange tileRange = calculateTileRange(extent, z);
            total += (tileRange.getYMaxRange() - tileRange.getYMinRange() + 1) * (tileRange.getXMaxRange() - tileRange.getXMinRange() + 1);
        }
        return total;
    }




}
